Міністерство освіти, науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
до лабораторної роботи №1
з дисципліни: «Системне програмне забезпечення»
Варіант №2
Підготував:
Прийняв:
Львів – 2016
Тема. «Процеси та потоки»
Мета. Засвоїти поняття «процесів» та «потоків» як основних компонентів сучасних операційних систем. Здобути навики створення, керування та знищення «процесів» та «потоків» в операційній системі Windows.
Теоретична частина
В ОС Windows XP реалізована пріоритетна (витісняюча) багатозадачність. Це означає, що ОС може тимчасово припинити виконання однієї програми і перемкнути процесор на виконання іншої. Перемикання відбувається незалежно від бажання кожної з програм, завдяки чому зависання однієї програми не приводить до зависання всієї системи.
ОС Windows підтримує 4 класи пріоритетів процесів: idle (простоюючий), normal (нормальний), high (високий) і realtime (реального часу). Програми, що запускаються користувачем, у загальному відносяться до додатків з класом пріоритету normal. Пріоритет idle ідеальний для додатків, що займаються моніторингом системи або збереженням екрану (screen saver). Клас пріоритету high слід використовувати тільки при необхідності. Клас пріоритету realtime використовують тільки: 1) в програмі, напряму що “спілкується” з устаткуванням, і 2) якщо додаток виконує швидкоплинну операцію, яку не можна переривати у жодному випадку.
Потоки мають 5 рівнів відносного пріоритету. Їх опис приведений в таблиці 1.
Таблиця 1 – Рівні пріоритету потоків
Ідентифікатор рівня
Опис
THREAD_PRIORITY_LOWEST
Пріоритет потоку повинен бути на 2 одиниці менше класу пріоритету процесу
THREAD_PRIORITY_BELOW_NORMAL
Пріоритет потоку повинен бути на 1 одиницю менше класу пріоритету процесу
THREAD_PRIORITY_NORMAL
Пріоритет потоку повинен відповідати класу пріоритету процесу
THREAD_PRIORITY_ABOVE_NORMAL
Пріоритет потоку повинен бути на 1 одиницю більше класу пріоритету процесу
THREAD_PRIORITY_HIGHEST
Пріоритет потоку повинен бути на 2 одиниці більше класу пріоритету процесу
Використовування декількох потоків в одному процесі дуже важливо з кількох причин. По-перше, це дозволяє добитися мінімального простою процесора, а значить – працювати більш ефективно. По-друге, потоки можуть виконувати які-небудь дії у фоновому режимі щодо основної програми. По-третє, потоки зручно використовувати також у випадку, якщо блокування або підвисання якої-небудь процедури не повинне стати причиною порушень функціонування основної програми.
2. Системні виклики для роботи з процесами
Функція визначена таким чином:
void ShellExecute(HWnd Wnd, const char * Operation,
const char *FileName, const_ char *Parameters,
const char *Directory, unsigned int ShowCmd).
Параметр Wnd є дескриптором батьківського вікна, в якому відображаються повідомлення додатку, що запускається. Звичайно як він можна просто вказати Handle.
Параметр Operation указує на рядок з нульовим символом в кінці, яка визначає виконувану операцію. Цей рядок може містити текст “open” (відкрити), “print” (надрукувати) або “explore” (досліджувати). Якщо параметр Operation рівний NULL, то за замовчанням виконується операція “open”.
Параметр FileName указує на рядок з нульовим символом в кінці, яка визначає ім’я файлу, що відкривається, або ім’я теки, що відкривається.
Параметр Parameters указує на рядок з нульовим символом в кінці, яка визначає передавані в додаток параметри, якщо FileName визначає виконуваний файл. Якщо FileName указує на рядок, що визначає документ або теку, що відкривається, то цей параметр задається рівним NULL.
Параметр Directory указує на рядок з нульовим символом в кінці, що визначає каталог за замовчуванням.
Параметр ShowCmd визначає режим відкриття вказаного файлу, звичайно, як і для функції WinExec, використовується значення SW_RESTORE.
Для того, щоб мати нагоду управляти створеним процесом в додатку слід використовувати виклик CreateProcess(). Функція була визначена таким чином:
BO...